草庐IT

Python NotImplemented 常量

全部标签

c++ - 委托(delegate)复制构造函数和常量数据初始化

我有一个类A,它有很多数据成员,其中一些是常量。所有数据成员都有适当的复制构造函数,所以我想为我的类默认一个复制构造函数:classA{public:A():a(1){}A(constA&op)=default;private://...Lotsofconstantandnon-constantmemberdata...constinta;};然后,我想编写一个构造函数,它接受对A的引用和一个应该初始化常量数据成员之一的值:A(constA&op,constinta_);这里op应该被复制,而a应该在之后用a_初始化或者不是复制。我想通过委托(delegate)给复制构造函数来避免手动

c++ - 使用整数常量 0 初始化实例,但没有其他常量值或整数变量

我想定义一个类,它的实例可以从整数常量零构造、隐式构造或赋值,但不能从任何其他数字常量,也不能从整数类型的变量(即使它的值恰好是运行时为零)。它也应该可以从同一类的其他实例复制构造。只要g++4.6和MSVC2010都支持(在适当的模式下),就可以使用C++11功能。具体地,给定classX{/*...*/};voidfn(X);这些都应该编译:Xa(0);Xb=0;Xc;c=0;Xd=a;Xe;e=a;fn(0);但这些不应该:Xf(1);Xg=1;Xh;h=1;fn(1);intii=23;Xa(ii);Xj=ii;Xk;k=ii;fn(ii);我试过了,但是没用:classX{p

c++ - 在 C++ 中初始化静态常量数组的特定元素

我有一些C需要转换为C++。它做了这样的事情:enum{ELEM0,ELEM1,ELEM2,ELEM3,ELEM4,MAX_ELEMS}#defineLEN16staticconstcharlut[MAX_ELEMS][LEN]={[ELEM2]="Two",[ELEM3]="Three",[ELEM1]="One",[ELEM4]="Four",[ELEM0]="Zero"}实际上,我有数百个元素在数组中没有任何顺序。我需要保证数组中的条目将枚举与适当的文本联系起来。是否可以在-std=gnu++11中使用像这样的位置参数来初始化数组? 最佳答案

c++ - 使用枚举作为常量表达式。哪个编译器是正确的?

以下代码使用枚举成员m作为常量表达式,即作为模板参数。代码在gcc下编译但不在clang(livedemo)下编译。Clang说“错误:非类型模板参数不是常量表达式”。问题可以通过交换线路//1来解决通过A::m>a.因此,我的问题不是如何解决这个问题,而是哪个编译器是正确的。templatestructA{};templatestructtst{enum:size_t{m=n%15};templatevoidcall(tstconst&t2){Aa;//1}}; 最佳答案 根据标准,Clang拒绝代码是正确的。t2.m是类成员访问

c++ - c/c++ 优化调用函数中的常量变量

C/C++编译器仅在使用-Os、-O1和-O2时使用常量参数(在编译时已知)优化单层函数。他们不会优化所有层。只有-O3可以做到这一点。gcc是不支持“优化”属性的WinAVR4.3.3。voidinner(doublevalue){//operationsusingvalue//...}voidouter(doublevalue){//fewoperationsusingvalue//...inner(value);}intmain(){inner(1);//optimizeouter(1);//onlyoptimizebyusing-O3}除了以下几种可能的解决方案还有哪些?-O3

c++ - MSVC 静态常量模板成员初始化失败

在使用MSVC编译器时,在模板类上初始化静态常量变量时​​遇到问题。我试过MSVC2013、MSVC2012和MSVC2010。此代码适用于MinGW、MinGW-w64、GCC和Clang。#include#includeusingnamespacestd;templatestructStringHolder{staticconststd::stringstr;};templateconststringStringHolder::str{"integer"};intmain(){//printsnothingwhencompiledwithMSVC2013,workswithMinG

c++ - 为什么 CppCheck 会为此静态常量数组给出数组访问越界错误?

CppCheck1.67在我的一个项目中发现了数组访问越界错误。我不认为代码有错,所以我将代码精简到仍然会引发相同错误的最低限度示例。为什么CppCheck对第一个C++示例(在命名空间内)给出以下错误,但对第二个示例(没有命名空间)却没有给出以下错误?我是不是在数组初始化时对命名空间做错了什么,或者这是CppCheck中的错误?报告错误:“数组'testArray[5]'在索引5处访问,超出范围。”namespaceTestNamespace{classTestClass{staticconstinttestArray[5];};constintTestClass::testArra

c++ - 为什么未初始化的 constexpr 变量不是常量?

我不确定这是编译器错误还是我误解了constexpr:structS{};constexprSs1{};constexprSs2;structtest{staticconstexprautot1=s1;staticconstexprautot2=s2;//errorhere};GCC4.8给我一个奇怪的错误“错误:字段初始值设定项不是常量”。s2真的不是常数吗?如果是,为什么?为了清楚起见,我实际上在我的代码中使用了一堆空结构(用于元编程https://github.com/porkybrain/Kvasir)所以我真的对这个特定示例很感兴趣。 最佳答案

c++ - 包含在许多翻译单元中时静态常量的开销?

在头文件中,可以在一行中声明和(预)定义全局常量。//constants.hnamespaceConstant{staticconstunsignedintframerate=60;staticconstchar*constwindowName="Test";staticconstunsignedchar*constcursorBitmap={lotsofdata};}我喜欢这种格式,因为它让我可以将我的常量保存在一个地方,并且避免需要在一个文件中声明常量并在另一个文件中定义它,有助于提高可读性。然而,当任何翻译单元包含constants.h时,它会在适当的位置扩展这些定义,每个单元。

c++ - 临时实例的常量正确性

这里是“作用域锁”习语的例子,它有一个常见的错误:没有创建局部变量,所以锁没有生效。这段代码在VC++2010和ComeauC++在线编译都完美无缺:classMutex{public:voidlock(){}};classScopedLock{public:ScopedLock():m_pm(0){}ScopedLock(Mutex&m):m_pm(&m){m_pm->lock();}private:Mutex*m_pm;private:ScopedLock&operator=(constScopedLock&);ScopedLock(constScopedLock&);};clas